#ifndef SCREENSHOTCONTROLWIDGET_H
#define SCREENSHOTCONTROLWIDGET_H
#include "ScreenShotWidget_global.h"

#include <QWidget>
#include <QPushButton>
#include <QHBoxLayout>
#include <QPainter>
#include <QToolButton>
#include <QPaintEvent>
#include <QMouseEvent>
class SCREENSHOTWIDGET_EXPORT ScreenShotControlWidget : public QWidget
{
    Q_OBJECT
public:

    ///@brief这个枚举类用于在绘制函数中区分需要绘制什么
    enum class ToolStatus:std::uint8_t{
        DrawDefault=0,//默认状态
        DrawRect,//绘制矩形
        DrawEllipse,//绘制椭圆
        DrawCasual,//随意绘制
        DrawText,//绘制文本
        DrawArrow,//绘制箭头
    };

    explicit ScreenShotControlWidget(QWidget *parent = nullptr);
public:
    ///@brief 布局初始化函数，这里边放了画笔修改的按钮，所以画笔相关的布局和颜色变化的槽函数也放在这里
    void InitLayout();



    ///@brief 所有控制面板的信号槽绑定函数
    void BindSignalandSlot();

    ///@brief 所有按钮的图标加载
    void LoadBtnsIcon();

    ///@brief 获得画笔颜色和大小的函数
    QPen GetPen()const;
signals:
    ///@brief 改变笔刷大小
    void ChangePen();

    ///@brief 绘制矩形
    void DrawRect();

    ///@brief 绘制原型
    void DrawEllipse();

    ///@brief 绘制箭头
    void DrawArrow();

    ///@brief 随意绘制
    void DrawCasual();

    ///@brief 绘制文本
    void DrawText();

    ///@brief 撤销绘制
    void ComeBack();

    ///@brief 关闭截图
    void CloseCapture();

    ///@brief 保存截图
    void SaveCapture();

public:
    ///槽函数
    /// @brief 确认按钮点击
    void OnVerifyBtnClicked();

    /// @brief 关闭按钮点击
    void OnCloseBtnClicked();

    /// @brief 绘制矩形按钮点击
    void OnDrawRectBtnClicked();

    /// @brief 绘制椭圆按钮点击
    void OnDrawEllipseBtnClicked();

    /// @brief 绘制箭头标记按钮点击
    void OnDrawArrowBtnClicked();

    /// @brief 绘制文本按钮点击
    void OnDrawTextBtnClicked();

    /// @brief 随意绘制按钮点击
    void OnDrawCasualBtnClicked(bool checked);

    /// @brief 回退按钮点击
    void OnBackBtnClicked();


public:

    ///@brief 控制面板按钮布局
    QHBoxLayout* m_controlLayout;

    ///@brief 截图控制面板上的8个按钮
    ///@brief 确认按钮
    QPushButton *m_verifyBtn;

    ///@brief 关闭按钮
    QPushButton *m_closeBtn;

    ///@brief 回退撤销按钮
    QPushButton *m_backBtn;

    ///@brief 添加文本按钮，，需要注意字体的类型
    QPushButton *m_addText;

    ///@brief 添加箭头指示按钮
    QPushButton *m_addArrow;

    ///@brief 添加椭圆按钮
    QPushButton *m_addEllipse;

    ///@brief 添加矩形按钮
    QPushButton *m_addRect;

    ///@brief 添加随意绘制按钮(可修改画笔的颜色和大小)，
    QToolButton *m_addDrawCasual;

    ///@brief 五个功能一致按钮的btnsgroup,保证这五个按钮同时只能有一个按钮被点击(绘制文本、箭头、椭圆、矩形、随意绘制)
    QButtonGroup *m_DrawFuctionGroup;

    ///@brief 记录当前画笔
    QPen m_curPen;

    ///@brief 选择画笔颜色和大小的控制面板的容器
    QWidget *m_casualDrawWidgetContainer;


    ///@brief 当前绘制状态的记录，用法关于控制绘制函数中控制绘制什么
    ToolStatus m_curToolStatus=ToolStatus::DrawDefault;

    ///@brief 资源文件的添加路径
    QString iconpath="";
};

#endif // SCREENSHOTCONTROLWIDGET_H
